package com.ljy.my_study.leetcode.powx_n;

/**
 * @author lijunying
 * @date 2021/5/20 8:46
 */
public class TestMain {
//    实现 pow(x, n) ，即计算 x 的 n 次幂函数（即，xn）。
//
//    示例 1：
//
//    输入：x = 2.00000, n = 10
//    输出：1024.00000
//    示例 2：
//
//    输入：x = 2.10000, n = 3
//    输出：9.26100
//    示例 3：
//
//    输入：x = 2.00000, n = -2
//    输出：0.25000
//    解释：2-2 = 1/22 = 1/4 = 0.25
//             
//
//    提示：
//
//            -100.0 < x < 100.0
//            -231 <= n <= 231-1
//            -104 <= xn <= 104
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/powx-n
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {
        System.out.println(new TestMain().myPow(8.84372
               , -5));
    }

    public double myPow1(double x, int n) {
        if(n==0){
            return 1;
        }
        double result=x;
        int a=Math.abs(n);
        for(int i=2;i<=a;i++){
            result*=x;
        }
        if(n<0){
            result=1/result;
        }
        return result;
    }

    public double myPow(double x, int n) {
        if(n==0){
            return 1;
        }
        return n>0?calculate(x,n):1/calculate(x,-n);
    }

    private double calculate(double x,long n){
        double result=x;
        while(n>1){
            result*=result;
            if(n%2==1){
                result*=x;
            }
            n/=2;
        }
        return result;
    }


}
